package CreationPattern.Prototype;

import java.util.Date;

/**
 * @Classname : DeepCopySheepClient
 * @Description : 测试 深拷贝（重写实现）
 * 注意：深拷贝（重写实现）不会使用构造器，引用类型（除字符串）成员变量会重新创建对象
 * @Author : chentianyu
 * @Date 2023/1/23 22:06
 */


public class DeepCopySheepClient {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("测试 深拷贝（重写实现）\n");
        DeepCopySheep sheep = new DeepCopySheep("多莉");
        sheep.info("原型羊");

        for (int i = 1; i <= 5; i++) {
            Thread.sleep(1000);
            System.out.println();

            DeepCopySheep copySheep = sheep.clone();
            copySheep.info("克隆羊");
            System.out.println("【原型羊0与" + "克隆羊" + i + "比较】" + sheep.compare(copySheep));
            copySheep.setName(i + "莉");
            copySheep.setCode(i);
            copySheep.setBirthday(new Date());
            copySheep.info("克隆羊调整后");
        }
    }
}

/** 20230123
 * 测试 深拷贝（重写实现）
 *
 * Sheep类[有参]构造器执行
 * 【原型羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 * 【原型羊0与克隆羊1比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫1莉，编号为 1，生于 Mon Jan 23 23:24:56 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 * 【原型羊0与克隆羊2比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫2莉，编号为 2，生于 Mon Jan 23 23:24:57 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 * 【原型羊0与克隆羊3比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫3莉，编号为 3，生于 Mon Jan 23 23:24:58 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 * 【原型羊0与克隆羊4比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫4莉，编号为 4，生于 Mon Jan 23 23:24:59 CST 2023
 *
 * 【克隆羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:24:55 CST 2023
 * 【原型羊0与克隆羊5比较】基本类型 code 相同 | 字符串 name 相同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫5莉，编号为 5，生于 Mon Jan 23 23:25:00 CST 2023
 */
